package com.ruoyi.project.system.mapper;

import com.ruoyi.project.system.domain.SysConfig;
import org.apache.commons.lang3.StringUtils;
import tk.mybatis.mapper.additional.idlist.DeleteByIdListMapper;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.entity.Example;

import java.util.Date;
import java.util.List;

/**
 * 参数配置 数据层
 * 
 * @author ruoyi
 */
public interface SysConfigMapper extends Mapper<SysConfig>, DeleteByIdListMapper<SysConfig, Long>
{
    /**
     * 查询参数配置信息
     * 
     * @param configKey 参数配置信息
     * @return 参数配置信息
     */
    default SysConfig selectByConfigKey(String configKey) {
        Example example = new Example(SysConfig.class);
        example.createCriteria().andEqualTo("configKey", configKey);
        return selectOneByExample(example);
    }

    /**
     * 查询参数配置列表
     * 
     * @param config 参数配置信息
     * @return 参数配置集合
     */
    default List<SysConfig> selectConfigList(SysConfig config) {
        Example example = new Example(SysConfig.class);
        Example.Criteria criteria = example.createCriteria();
        if (StringUtils.isNotEmpty(config.getConfigName())) {
            criteria.andLike("configName", "%" + config.getConfigName() + "%");
        }
        if (StringUtils.isNotEmpty(config.getConfigType())) {
            criteria.andEqualTo("configType", config.getConfigType());
        }
        if (StringUtils.isNotEmpty(config.getConfigKey())) {
            criteria.andLike("configKey", "%" + config.getConfigKey() + "%");
        }
        if (StringUtils.isNotEmpty(config.getBeginTime())) {
            criteria.andCondition("date_format(create_time, '%y%m%d') >= date_format('" + config.getBeginTime() + "', '%y%m%d')");
        }
        if (StringUtils.isNotEmpty(config.getEndTime())) {
            criteria.andCondition("date_format(create_time, '%y%m%d') <= date_format('" + config.getEndTime() + "', '%y%m%d')");
        }
        return selectByExample(example);
    }

    /**
     * 新增参数配置
     * 
     * @param config 参数配置信息
     * @return 结果
     */
    default int insertConfig(SysConfig config) {
        config.setCreateTime(new Date());
        return insertSelective(config);
    }

    /**
     * 修改参数配置
     * 
     * @param config 参数配置信息
     * @return 结果
     */
    default int updateConfig(SysConfig config) {
        config.setUpdateTime(new Date());
        return updateByPrimaryKeySelective(config);
    }
}